package com.sqx.modules.tbOrders.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sqx.common.utils.Result;
import com.sqx.modules.app.entity.SysEvaluate;
import com.sqx.modules.tbOrders.entity.TbOrders;
import com.sqx.modules.tbOrders.entity.vo.TbOrdersVO;

/**
 * @author Admin
 * @description 针对表【tb_orders(商品订单)】的数据库操作Service
 * @createDate 2024-07-09 11:09:26
 */
public interface TbOrdersService extends IService<TbOrders> {

    /**
     * 用户下单
     *
     * @param tbOrders
     * @return
     */
    Result placeOrder(TbOrders tbOrders);

    /**
     * 获取用户端订单列表
     *
     * @param page
     * @param limit
     * @param tbOrders
     * @return
     */
    Result getAppTbOrdersList(Integer page, Integer limit, TbOrders tbOrders);

    /**
     * 获取用户端订单详情如果评价了将评价一起返回
     * @param orderId
     * @param userId
     * @return
     */
    Result getAppOrdersDetail(Long orderId,Long userId);

    /**
     * 用户端取消订单
     * @param userId
     * @param orderId
     * @return
     */
    Result appCancelOrder(Long userId,Long orderId);

    /**
     * 用户端卖家确认发货
     * @param userId
     * @param orderId
     * @return
     */
    Result appSendGoods(Long userId,Long orderId,String trackingNumber);

    /**
     * 用户端买家确认收货待评价
     * @param userId
     * @param orderId
     * @return
     */
    Result appReceived(Long userId,Long orderId);

    /**
     * 用户端买家评价
     * @param userId
     * @param orderId
     * @param evaluateMessage   评价内容
     * @param satisfactionFlag  评级 1:非常差 2:差 3:一般 4:满意 5:非常满意
     * @param evaluateImg       评价图片
     * @return
     */
    Result appEvaluate(Long userId, Long orderId,String evaluateMessage,Integer satisfactionFlag,String evaluateImg);

    /**
     * 管理端获取订单列表
     * @param page
     * @param limit
     * @param startTime
     * @param endTime
     * @param tbOrdersVO
     * @return
     */
    IPage<TbOrdersVO> selectTbOrdersList(Integer page, Integer limit, String startTime, String endTime, TbOrdersVO tbOrdersVO);

    /**
     * 获取用户端订单列表(我卖出的)
     * @param page
     * @param limit
     * @param tbOrders
     * @return
     */
    Result getTbOrdersList(Integer page, Integer limit, TbOrders tbOrders);

    Result getTbOrdersListByTurnover(Long userId,Integer page, Integer limit);

    void payBack(String outTradeNo);

    void setCommission(Long orderId, int classify);

    /**
     * 修改回收订单
     */
    Result updateRecycleOrder(TbOrders tbOrders);

    IPage<TbOrdersVO> selectTbOrdersListByType(Integer page, Integer limit, String startTime, String endTime, TbOrdersVO tbOrdersVO);

    Result updateOrder(TbOrders tbOrders);

    Result appCancelOrderByType(Long userId, Long orderId);

    Result getRecycleAppTbOrdersList(Integer page, Integer limit, TbOrders tbOrders);

    Result assignRecycleUser(Long orderId, Long userId);

    Result getEvaluateList(Integer page, Integer limit,SysEvaluate sysEvaluate);

    Result updateEvaluateState(SysEvaluate sysEvaluate);

    Integer selectOrdersCountStatisticsByYear(Integer flag,String time,Integer status);

    /**
     * 线下交易
     * @param tbOrders
     * @return
     */
    Result offlineTransaction(TbOrders tbOrders);

    /**
     * 发快递
     */
    Result sendGoods(TbOrders tbOrders);

    /**
     * 根据快递单号查询物流
     */
    Result getLogistics(String trackingNumber);

    /**
     * 管理端修改回收订单
     */
    Result updateRecycleOrderByAdmin(TbOrders tbOrders);

    /**
     * 管理员修改回收订单的取货方式
     * @param tbOrders
     * @return
     */
    Result updateOrderByAdmin(TbOrders tbOrders);

    /**
     * 统计回收订单的待回收数量
     * @param userId
     * @return
     */
    Result countByRecycleUserId(Long userId);

    /**
     * 管理端修改回收订单质检报告
     * @param tbOrders
     * @return
     */
    Result updateOrderByImg(TbOrders tbOrders);
}
